Skip to content

egorvozhzhov/docker-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

  1. Настроим docker-compose файл, в котором в качестве сервисов будет: БД redis и task. Настроим постоянное хранение, сетевое окружение и healthckecks. Для task настроим Dockerfile с необходимой версией питона (облегченной) и необходимыми библиотеками. Также сделаем dockerignore файл для исключения Dockerfile из сборки. В app.py находится логика приложения: при помощи Flask будет подниматься сервер, из redis будем получать ФИО, формировать HTML страницу для возврата.

  2. Сделаем сборку task

    image

  3. С помощью команды docker-compose up -d развернем сервисы (флаг -d выполняет команду в фоновом режиме, позволяя сохранить возможность управления терминалом). В браузере по адресу localhost:5001 увидим результат

    image

  4. Перейдем к анализу безопасности. Установим trivy

    image

    Запустим сканирование образа task. В начале произойдет загрузка БД с уязвимостями. Далее появятся найденные уязвимости.

    image

    В библиотеке libexpat (свободная потокоориентированная библиотека парсинга XML, написанная на C) будет найдено две уязвимости:

    1. CVE-2023-52425 - Неконтроллируемое потребление ресурсов - Продукт не контролирует должным образом распределение и обслуживание ограниченного ресурса, тем самым позволяя субъекту влиять на количество потребляемых ресурсов, что в конечном итоге приводит к исчерпанию доступных ресурсов.

      Решение: уязвимость существует до версии 2.5.0, необходимо использовать библиотеку, начиная с версии 2.6.0

    2. CVE-2023-52426 - Неправильное ограничение рекурсивных ссылок на сущности в DTD (XML Entity Expansion) - Продукт использует XML-документы и позволяет определять их структуру с помощью определения типа документа (DTD), но не контролирует должным образом количество рекурсивных определений сущностей.

      Решение: уязвимость существует до версии 2.5.0, необходимо использовать библиотеку, начиная с версии 2.6.0

    В библиотеке pip (METADATA) найдена одна уязвимость: CVE-2023-5752 -Неправильная нейтрализация специальных элементов, используемых в команде (внедрение в команду) - Продукт полностью или частично создает команду, используя входные данные вышестоящего компонента, но не нейтрализует или неправильно нейтрализует специальные элементы, которые могут изменить предполагаемую команду при ее отправке нижестоящему компоненту.

    Решение: уязвимость существует до версии 23.3, необходимо использовать библиотеку, начиная с версии 23.3. У нас ипользуется версия 23.0.1

  5. В отдельную папку склонируем репозиторий утилиты bench-security image

    image

    Запустим ее

    image image image image image image

    Получим следующие варны:

    1.1.1 - Ensure a separate partition for containers has been created (Automated) - Убедитесь, что создан отдельный раздел для контейнеров (автоматизирован)

    Всегда рекомендуется использовать другой, кроме раздела docker по умолчанию. Большинство облачных платформ, таких как AWS или DigitalOcean, по умолчанию никогда не предоставляют максимальное свободное место под разделом /var. Так что в этом случае вы можете столкнуться с нехваткой дискового пространства.

    Как найти раздел по умолчанию для контейнеров Docker? -> docker info -f'{{.DockerRootDir }}'

    1.1.3 - Ensure auditing is configured for the Docker daemon (Automated) - Убедитесь, что аудит настроен для демона Docker (автоматизирован)

    Аудит на linux-сервере может заключаться в настройке демона auditd. Этот демон отвечает за запись записи аудита в файл журнала аудита. Чтобы настроить аудит для файлов Docker, выполните:

    image

    1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) - Убедитесь, что аудит настроен для файлов и каталогов Docker -/run/containerd (автоматический)

    Docker рекомендует использовать аудит на системном уровне для ключевых каталогов Docker. Аудит регистрирует все операции, влияющие на отслеживаемые файлы и каталоги. Это позволяет отслеживать потенциально деструктивные изменения. Убедитесь, что у вас установлен auditd. Отредактируйте файл /etc/audit/audit.rules и добавьте следующие строки в нижнюю часть файла:

image

Инструкция -p wa означает, что auditd будет регистрировать записи и изменения атрибутов, которые влияют на файлы. Если выходные данные Docker Bench предлагают использовать аудит для дополнительных каталогов, добавьте их в список. Каталоги Docker могут меняться со временем.

Чтобы изменения вступили в силу, необходимо перезапустить auditd:

sudo systemctl restart auditd

2.2 - Ensure network traffic is restricted between containers on the default bridge (Scored) - Убедитесь, что сетевой трафик ограничен между контейнерами на мосту по умолчанию (оценено)

файл конфигурации /etc/docker/daemon.json:

"icc":false — отключает обмен данными между контейнерами, чтобы избежать ненужной утечки информации.

2.9 - Enable user namespace support (Scored) - Включить поддержку пользовательского пространства имен (оценено)

User namespaces - это механизм в ядре Linux, который позволяет изолировать процессы, принадлежащие разным пользователям, даже если они используют одинаковые идентификаторы пользователя внутри и снаружи контейнера. Это обеспечивает дополнительный уровень безопасности и изоляции.

  1. Убедиться, что поддержка user namespaces включена в ядре Linux на хосте. Для этого можно выполнить команду:

    bash grep CONFIG_USER_NS /boot/config-uname -r

    Если вывод содержит =y или =CONFIG_USER_NS=y, то поддержка включена.

  2. Добавить --userns-remap в файл конфигурации Docker daemon.

    Открыть файл конфигурации Docker daemon для редактирования (обычно располагается в /etc/docker/daemon.json) и добавить туда следующий параметр:

    { "userns-remap": "default" }

    После внесения изменений нужно перезапустить сервис Docker:

    sudo systemctl restart docker

  3. После этого Docker будет использовать пользовательское пространство имен для изоляции контейнеров. Можно проверить текущую конфигурацию Docker с помощью команды:

    docker info | grep userns

    2.12 - Ensure that authorization for Docker client commands is enabled (Scored) - Убедитесь, что авторизация для клиентских команд Docker включена (оценена)

    ~/.docker/config.json

    image

    2.13 - Ensure centralized and remote logging is configured (Scored) - Убедитесь, что настроено централизованное и удаленное ведение журнала (оценено)

    ELK Stack (Elasticsearch, Logstash, Kibana)

    2.14 - Ensure containers are restricted from acquiring new privileges (Scored) - Убедитесь, что контейнерам запрещено получать новые привилегии (оценено)

    docker run --no-new-privileges my_image

    2.15 - Ensure live restore is enabled (Scored) - Убедитесь, что включено оперативное восстановление (оценено)

    /etc/docker/daemon.json

    {

    "live-restore": true

    }

    2.16 - Ensure Userland Proxy is Disabled (Scored) - Убедитесь, что пользовательский прокси отключен (оценено)

    {

    "userland-proxy": false

    }

    4.5 - Ensure Content trust for Docker is Enabled (Automated) - Убедитесь, что доверие к контенту для Docker включено (автоматически)

    Включение Content Trust для Docker — это отличная практика для обеспечения безопасности контейнеров. Content Trust используется для проверки подлинности и целостности образов Docker перед их загрузкой и запуском.

    export DOCKER_CONTENT_TRUST=1

    docker trust key generate <ИМЯ>

    docker trust sign <ИМЯ_ОБРАЗА>:<ТЕГ>

    4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated) - Убедитесь, что инструкции по проверке работоспособности были добавлены к изображениям контейнеров (были добавлены до проверки)

  4. Проверим уязвимости с помощью docker-scout. Для этого выберем образ и выполним анализ image image

    В результате будут обнаружены те же самые уязвимости, что выявила утилита trivy image image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published